package 热题100.双指针.移动零_283;
/*
给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
请注意 ，必须在不复制数组的情况下原地对数组进行操作。

示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:
输入: nums = [0]
输出: [0]

思路：
    双指针：一个指针固定，另一个指针遍历，如果另一个指针指到不为0的值就和前面的指针交换，由于二者指针都是从0
          开始，那么如果固定指针是数字的话，二者会原地交换，不用考虑把前后数字顺序弄混的情况！！
* */
public class Solution {
    public static void main(String[] args) {
        int[] nums = {1, 0};
        moveZeroes(nums);
    }
    public static void moveZeroes(int[] nums) {
        if (nums == null){
            return;
        }
        int left = 0;
        for (int right = 0; right < nums.length; right ++){
            if (nums[right] != 0){
                reverse(nums, left, right);
                left ++;
            }
        }
    }
    public static void reverse(int[] nums, int left, int right){
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
    }
}
